let str = 'abc'

let obj = { name: 'iverson' }

console.log(Object.prototype.toString.call(str))

function myType(target) {
    let type = Object.prototype.toString.call(target)
    return type.slice(8, type.length - 1)
}

if (myType(str) === 'String') {
    console.log("是一个字符串")
}


let str1 = 'abc'
console.log(typeof (str1))

let n = null
console.log(typeof n) // object
// 这是js的一个bug
// 这是由于typeof是通过二进制来区别数据类型的
// 通过开头0来区分的
// 只要是0开头的 都归属于object
// '0000xxxx' ---object
// '00000000' null
// 所以null会被typeof归在object中

let arr = [1, 2]
console.log(str1 instanceof String) // false
console.log(arr instanceof Array) // true


console.log(str1.__proto__ === String.prototype, "str1")
// 虽然这里是true 但其实是不成立的
// 因为str1并不是一个对象 并不存在属性__proto__
// 但是js引擎会自动转换，通过new来创建一个字符串的实例对象

function Person(name) {
    this.name = name
}
let p = new Person('iverson')

// 实例对象的隐式原型等于构造函数的显示原型
p.__proto__ === Person.prototype
console.log(p.__proto__ === Person.prototype)


console.log(isNaN(124),"---")
console.log(isNaN(','))
console.log(isNaN(false))
console.log(isNaN(null))
console.log(isNaN(undefined))



